気象情報APIの OpenWeatherMap で「現在・1時間毎・1日毎」の天気予報を取得してみた
天気予報で作りたいものを思いつきましたが、「そもそも天気予報ってAPIでどう取得するんだろう?」となったので、実際に試してみました。
気象情報APIの選定
気象情報を扱うAPIはいくつかありますが、「個人でもOK・無料の範囲・1時間毎のデータを取得できる」を満たすOpenWeatherMapを使ってみます。
- Weather and forecasts - OpenWeatherMap
- YOLP(地図):気象情報API - Yahoo!デベロッパーネットワーク
- お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報
OpenWeatherMapを使う
アカウント登録
OpenWeatherMapにアクセスしてサインアップします。
APIキーを取得
ログイン後のメニューに表示されているAPI Keys
を選択すると、APIキーが表示されています。
APIを叩く準備をする
One Call APIを使います。各種条件は下記とします。
- 場所: 東京駅
- 緯度: 35.681236
- 経度: 139.767125
- 単位: 摂氏・メートル
- 言語: 日本語
これらをもとにAPIのクエリ文字列を作りました。
curl "https://api.openweathermap.org/data/2.5/onecall?lat=35.681236&lon=139.767125&units=metric&lang=ja&appid={YOUR API KEY}"
なお、APIキーの取得直後は「Invalid API key」と401エラーになりますが、数時間ほど待てばOKです。
レスポンス内容を確認する
実際のレスポンスは大量にあるため省略します。(見やすく整形して約1300行)
全体構造
構造としては下記となっており、current
とhourly
とdaily
のデータがバッチリあります。One Call APIのドキュメント通りですね。
{ "lat": 35.68, "lon": 139.77, "timezone": "Asia/Tokyo", "timezone_offset": 32400, "current": { ...(略)... }, "hourly": [ { ...(略)... }, ...(略)... { ...(略)... } ], "daily": [ { ...(略)... }, ...(略)... { ...(略)... } ] }
hourly
の1要素を抜粋すると下記です。
{ "dt": 1591866000, "temp": 24.02, "feels_like": 20.91, "pressure": 1004, "humidity": 88, "dew_point": 21.91, "clouds": 75, "wind_speed": 11.09, "wind_deg": 203, "weather": [ { "id": 501, "main": "Rain", "description": "適度な雨", "icon": "10d" } ], "rain": { "1h": 1.52 } }
使いそう&面白そうな値
- 時刻: dt
- 温度: temp
- 体感温度: feels_like
- 気圧: pressure
- 湿度: humidity
- UV指数: uvi
- 風速: wind_speed
- 気象情報: weather.main
- 気象情報の詳細: weather.description
- 気象情報のアイコンID: weather.icon
- 降水量: rain.1h
- 積雪量: snow.1h
公式ドキュメントのアイコンIDを参照すれば、対応したアイコン(画像)が分かります。
さいごに
次はこの情報を活用してみたいと思います!